<template>
	<div class="msgbox">
		<van-nav-bar
			title="二维码"
			left-text="返回"
			left-arrow
			fixed
			@click-left="returnHome"
		/>
		<div id="code">
			<div style="width:14rem;height:14rem; background-color: #fff; margin: 15% auto 5%; text-align: center"></div>
			<p class="tip" style="text-align: center">...载入中...</p>
		</div>
		<p>将二维码放入框内，即可自动扫描</p>

    <van-button round block type="info" @click="sweep">开始扫码</van-button>
		
	</div>
</template>
<script>  
  import { getCourse } from '@/api/course.js';
	import {joinCourse, ifJoinCourse} from '@/api/member.js'
  import { Toast } from 'vant';
	export default {
		data() {
			return {
				scan: ""
			}
		},
		mounted() {
			const self = this
			if (window.plus) {
				self.plusReady()
			} else {
				document.addEventListener('plusready', self.plusReady, false);
			}
			document.addEventListener('DOMContentLoaded', function() {
				alert('DOMLoaded')
				self.domready = true;
				self.plusReady()
			}, false)
		},
		methods: {
			plusReady() {
				
				// 获取窗口               
				this.scan = new plus.barcode.Barcode('code');
				this.scan.onmarked = this.onmarked;
				console.log(this.scan)
			},

			sweep() {  // 按钮的点击事件
				
				this.scan.start();  // 调用设备的摄像头在控件中预览，并获取捕获数据进行扫码识别，当识别出条码（二维码）数据时触发onmarked事件返回扫码结果。
			},
      returnHome() {
        
        this.scan.close();
        this.$router.push({
          name: "home" ,                 
        })
      },
			async onmarked(type, result) { // 扫码成功
				var text = '未知: ';

				switch (type) {
					case plus.barcode.QR:
						type = 'QR';
						break;
					case plus.barcode.EAN13:
						type = 'EAN13';
						break;
					case plus.barcode.EAN8:
						type = 'EAN8';
						break;
					default:
						type = '其他' + type
						break;
				}

				result = result.replace(/\n/g, '')
        var r = /^\+?[1-9][0-9]*$/;　　//正整数

				if (result.indexOf('http://') == 0 || result.indexOf('https://') == 0) {  // 二维码是网页时
					plus.nativeUI.confirm("二维码类型：" + type + "\n扫描结果：" + result, function(i) {
						if (i.index == 0) {
							var urlStr = encodeURI(result)
							plus.runtime.openURL(urlStr);
						} else {
							self.back(); //返回上个页面  
						}
					}, '', ['打开', '取消']);
				} else if(type === 'QR' && r.test(result)){  

          let stateCode = 0; // 三种状态的判断 1：已加入班课、2：班课不存在、3：班课未开放、4：课程已结束、5：课程可以加入
          let openState = false;
          let endState = false;
          let joinState = false;

          await getCourse(result).then(res => { // 看班课信息
						console.log(res)
						if(res.data.code === 0) { 
							console.log('班课存在');
							openState = res.data.data.opened;
							endState = res.data.data.ended;
							stateCode++; // 1 班课存在
						} else if(res.data.code === 1008) {   
							Toast('班课不存在');
							this.scan.close();
              this.$router.push({
                name: "home" ,                 
              }) //关闭
						} else {
							Toast(res.data.msg);
						}
					}).catch(err => {
						console.log(err);
						Toast('请求失败或超时');
					});

          if(stateCode === 1) {
						await ifJoinCourse(result).then(res => { // 是否加入班课
							console.log(res)
							if(res.data.code === 0) {
								joinState = res.data.data;
								if(joinState) {
									Toast('已经加入班课');
									this.scan.close();
                  this.$router.push({
                    name: "home" ,                 
                  }) //关闭									
								} else {
									console.log('没有加入班课');
									stateCode++; // 2 班课存在且没有加入班课
								}
							} else {  
								Toast(res.data.msg);							
							}
						}).catch(err => {
							console.log(err);
							Toast('请求失败或超时');
						});
					}
					
					if(stateCode === 2 ) { // 2 班课存在且没有加入班课
						if(endState) { // 课程结束了
							Toast('该班课已结束');
							this.scan.close();
              this.$router.push({
                name: "home" ,                 
              }) //关闭
						} else {
							stateCode++; // 3 班课存在且没有加入班课 且 课程没有结束
						}
					}

					if(stateCode === 3 ) { // 3 班课存在且没有加入班课 且 课程没有结束
						if(openState) { // 课程开放
							await joinCourse(result).then(res => {
								console.log(res)
								if(res.data.code === 0) {
									Toast('加入班课成功');									
								} else if(res.data.code === 1005) {  
									Toast('加入班课失败');
								}
							}).catch(err => {
								console.log(err);
								Toast('请求失败或超时');
							});
							this.scan.close();
              this.$router.push({
                name: "home" ,                 
              })
						} else {
							Toast('该班课不允许加入');
							stateCode++; // 4 班课存在且没有加入班课 且 课程没有结束   但不允许加入
						}
					} 
					if(stateCode > 3) {  // 如果班课没加入 且开放的						
						this.scan.close();
            this.$router.push({
              name: "home" ,                 
            }) //关闭											
					}

         // Toast(result);
          // joinCourse(result).then(res => { // 根据result 即 班课id 加入班课
					// 	console.log(res)
					// 	if(res.data.code === 0) {
					// 		Toast('加入班课成功');
          //     this.scan.close(); // 关闭条码识别控件
          //     this.$router.push({
          //       name: "home" ,                 
          //     })
					// 	}
					// }).catch(err => {
					// 	console.log(err);
					// 	Toast('加入班课失败');
					// });
					
        } else {
            Toast('无法识别的二维码');
            this.scan.close();
            this.$router.push({
              name: "home" ,                 
            })
        }
			},		
		},
	}


</script>

